%module OgreOverlayContainer

%{
#include "OGRE/OgreOverlayContainer.h"
	%}

%import "OgrePrerequisites.i"
%import "OgreOverlayElement.i"
 //#include "OgreIteratorWrappers.h"


namespace Ogre {

	%nodefaultctor OverlayContainer;
    class OverlayContainer : public OverlayElement
    {
    public:
//        typedef map<String, OverlayElement*>::type ChildMap;
//        typedef MapIterator<ChildMap> ChildIterator;
//        typedef map<String, OverlayContainer*>::type ChildContainerMap;
//        typedef MapIterator<ChildContainerMap> ChildContainerIterator;

        /// Constructor: do not call direct, use OverlayManager::createOverlayElement
//        OverlayContainer(const String& name);
        virtual ~OverlayContainer();

        virtual void addChild(OverlayElement* elem);

        virtual void addChildImpl(OverlayElement* elem);

        virtual void addChildImpl(OverlayContainer* cont);

        virtual void removeChild(const String& name);

        virtual OverlayElement* getChild(const String& name);

//		void initialise(void);

//        void _addChild(OverlayElement* elem);
//        void _removeChild(OverlayElement* elem) { _removeChild(elem->getName()); }
//        void _removeChild(const String& name);

//        virtual ChildIterator getChildIterator(void);

//        virtual ChildContainerIterator getChildContainerIterator(void);

//	virtual void _positionsOutOfDate(void);

//        virtual void _update(void);

//        virtual ushort _notifyZOrder(ushort newZOrder);

//        virtual void _notifyViewport();

//        virtual void _notifyWorldTransforms(const Matrix4& xform);

//	    virtual void _notifyParent(OverlayContainer* parent, Overlay* overlay);

//        virtual void _updateRenderQueue(RenderQueue* queue);

	inline bool isContainer() const;

//		virtual inline bool isChildrenProcessEvents() const

//		virtual inline void setChildrenProcessEvents(bool val)

		virtual OverlayElement* findElementAt(Real x, Real y);		// relative to parent

	    void copyFromTemplate(OverlayElement* templateOverlay);
        virtual OverlayElement* clone(const String& instanceName);

    };
}
